<?php 

CREATE TABLE stu(
	id int(6) primary key AUTO_INCREMENT COMMENT '主键',
	name varchar(20) unique COMMENT '姓名',
	num int(5) zerofill COMMENT '学号',
	sex enum('男','女','保密') default "保密" COMMENT '性别',
	age int(3) unsigned not null COMMENT '年龄',
	phone varchar(11) COMMENT '手机',
	email varchar(11) COMMENT '邮箱'
	);

CREATE TABLE users(
	id int(6) primary key AUTO_INCREMENT COMMENT '主键',
	user varchar(20) not null COMMENT '用户名',
	paw varchar(20) not null COMMENT '密码',
	sex enum('男','女','保密') default "女" COMMENT '性别',
	cid enum('HTML','JS','PHP') default "PHP" COMMENT '类别',
	llnum int(6) not null default 0 COMMENT '浏览量',
	hfnum int(6) not null default 0 COMMENT '回复量',
	dznum int(6) not null default 0 COMMENT '点赞量',
	time int(10) COMMENT '时间'
	);


CREATE TABLE wt(
	uid int(6) COMMENT '问题id',
	fbwt text COMMENT '发表问题',
	time date COMMENT '发表时间',
	hfnum int(4) COMMENT '回复次数',
	llnum int(6) COMMENT '浏览次数'
	);

CREATE TABLE wtclass(
	wtcid int(1) COMMENT '问题类id',
	cclass varchar(20) COMMENT '问题类'
	);

CREATE TABLE hf(
	hfid int(6) COMMENT '回复问题id',
	hfwt text COMMENT '回复问题',
	time date COMMENT '回复时间',
	dznum int(4) COMMENT '回复点赞次数',
	hfwt2 text COMMENT '回复被回复'
	);


INSERT INTO WTB (name,numHF,cid) VALUES('小白',2,'HTML'),('小米','1','');
create table stu3(
	id int(6) primary key auto_increment COMMENT '主键',
	name varchar(20) unique COMMENT '姓名',
	num int(5) zerofill COMMENT '学号',
	sex enum('男','女','保密') default "保密" COMMENT '性别',
	age int(3) unsigned not null COMMENT '年龄',
	phone varchar(11) COMMENT '手机',
	email varchar(11) COMMENT '邮箱'
	);



INSERT INTO 语句用于向表格中插入新的行  insert:嵌入 into：输入
语法
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
INSERT INTO 表名称 VALUES (值1, 值2,....)
实例
1. INSERT INTO stu (name,qq) VALUES ('学并思','113664000');  //插入一行对应的值
2. INSERT INTO stu (name,sex,age) VALUES('小米','女','16'),('小米','女','16'); //同时插入两行对应的值
3. INSERT INTO stu VALUES ('','','小米','女','16') //不写列名只有值,前提是所有值都必须插入


Update   SET语句用于修改表中的数据   Update：修改 SET：设置  WHERE：哪里，在…的地方
语法
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
实例：
1. UPDATE stu SET name = '大牛学院' WHERE id = 1 ; 
2. UPDATE stu SET name = '小琳' WHERE id > 2; //修改所有id大于2的数据
3. UPDATE stu SET age = '18'; //不加where是修改表中所有数据


FROM 从,来自
语法  
DELETE FROM 表名称 WHERE 列名称 = 值
实例：
DELETE FROM stu WHERE id = 3; 


**查询**
//2017-7-19
语法
SELECT 列名称 FROM 表名称 
SELECT * FROM 表名称
SELECT 列名称 as 结果集的新列名 FROM 表名称  //as 使用别名,可以将列别名应用于where语句中
SELECT 列名称,列名称,... FROM 表名称
实例
select name from stu;
select * from stu;
select name as newname from stu;
select name,qq from stu;

WHERE 子句
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值

AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
select * from stu where name="学并思" and qq="113664000";
select * from stu where name="学并思" or qq="113664000";


SELECT DISTINCT 语句 去重(如想看里面有多少类)
语法
SELECT DISTINCT 列名称 FROM 表名称
实例
select distinct sex from stu;


ORDER BY 语句 用于根据指定的列对结果集进行排序(运用于对积分的排行),默认按照升序对记录进行排序。 order:秩序 by:根据
实例
select * from stu order by qq;//默认升序
select * from stu order by qq desc;//降序
select * from stu order by qq asc;//升序


SELECT LIMIT 语句 取出部分数据记录(运用于分页) limit:限制; 界限; 部分;
语法
SELECT 列名称 FROM 表名称 LIMIT 数量
SELECT 列名称 FROM 表名称 LIMIT 位置(0是起始位置),数量
实例
select name from stu limit 1;
select name from stu limit 0,3;


注:SELECT BETWEEN 语句[注:因有了代替的写法,实际少用]  between:在…之间;
操作符BETWEEN...AND会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
语法
SELECT 列名称 FROM 表名称 WHERE 列名称 BETWEEN 值1 AND 值2
实例
select name from stu where age between 18 and 20
代替写法
select * from stu where age>18 and age<20


SELECT IN 语句 [相当于 or 的简写法],IN 操作符允许我们在 WHERE 子句中规定多个值。
语法
SELECT 列名称 FROM 表名称 WHERE 列名称 IN (值1,值2,...)
SELECT 列名称 FROM 表名称 WHERE 列名称 NOT IN (值1,值2,...)
实例
select name from stu where name in ('学并思','大牛学院');
select name from stu where name not in ('学并思','大牛学院');
相似 or 的写法如下:相对来说,当值多的情况下用IN写法要更方便
select name from stu where name="小米" or name="小花" or name="小明" or.... 


SELECT LIKE 语句 LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。 like:比如;相似的;相同的
语法
SELECT 列名称 FROM 表名称 WHERE 列名称 LIKE '值%'
SELECT 列名称 FROM 表名称 WHERE 列名称 LIKE '%值'
SELECT 列名称 FROM 表名称 WHERE 列名称 LIKE '%值%'
SELECT 列名称 FROM 表名称 WHERE 列名称 NOT LIKE '%值%'
实例
select name from stu where name like '学%';
select name from stu where name like '%并';
select name from stu where name like '%思%';
select name from stu where name not like '%学%';


SELECT IS NULL 语句 判断字段值是否为空
语法
SELECT 列名称 FROM 表名称 WHERE 列名称 IS NULL
SELECT 列名称 FROM 表名称 WHERE 列名称 IS NOT NULL
实例
select name from stu where qq is null;
select name from stu where qq is not null;


SELECT IF 语句 在结果集中进行判断
语法
SELECT IF(表达式,值1[成立],值2[否则]) FROM 表名称
SELECT IFNULL(列名称,值) FROM 表名称
实例
select *,if(age>20,'中年','少年') nianling from stu;
select ifnull(qq,'110112114') from stu;


rand() 函数 通过rand()函数结合select语句可以方便的得到随机结果集，这在项目开 发中经常被使用到
语法
SELECT 列名称 FROM 表名称 ORDER BY RAND() LIMIT 数量
实例
select name from stu order by rand() limit 6;




***修改表结构***
//2017-07-20
ALTER TABLE 语句 用于在已有的表中添加、修改或删除列。 alter:改变; 修改;
修改表名
语法
ALTER TABLE 原表名 RENAME 新表名
实例
alter table stu rename new_stu


修改字段(类型)同时更名
语法
ALTER TABLE 表名 CHANGE 旧字段 新字段  change:改变
实例
alter table stu change qq qq1 char(11);


修改字段(类型)
语法
ALTER TABLE 表名 MODIFY 字段  modify:修改
实例
alter table stu modify name char(20);


增加字段
语法
ALTER TABLE  表名 ADD 字段 [FIRST | AFTER 字段 (可选该新增的字段 插在哪个已有的字段之前 | 之后)]  first:第一 after:在…以后
实例
alter table stu add password varchar(32) after name;


删除字段
语法
ALTER TABLE 表名 DROP 字段名 若字段里面有数据也一起被删除  drop:放弃,减少
实例
alter table stu drop password;


填加主键
语法
ALTER TABLE 表名 ADD PRIMARY KEY (字段名)
实例
alter table stu add primary key(id);
删除主键
语法
ALTER TABLE 表名 DROP PRIMARY KEY
实例
alter table stu drop primary key;


**日期与时间**
类型DATE .(一般存生日) YYYY-MM-DD
类型DATETIME .(一般存不需要查询的时间) YYYY-MM-DD HH:MM:SS

NOW() 函数 返回当前的日期和时间
实例
select now();
update stu set shijian=now() where id=1;

CURDATE() 函数 返回当前的日期
CURTIME() 函数 返回当前的时间


**分组统计**
SQL COUNT() 函数 返回匹配指定条件的行数。
语法
SELECT COUNT(列名称) FROM 表名
实例
select count(id) from stu where sex="男";


SQL MIN() 函数 返回一列中的最小值。NULL 值不包括在计算中。
语法
SELECT MIN(列名称) FROM 表名
实例
select min(age) from stu;


SQL MAX() 函数 返回一列中的最大值。NULL 值不包括在计算中。
语法
SELECT MAX(列名称) FROM 表名
实例
select max(age) from stu;


SQL SUM() 函数 返回数值列的总数（总额）。
语法
SELECT SUM(列名称) FROM 表名
实例
select sum(age) from stu;


SQL AVG 函数 返回数值列的平均值。NULL 值不包括在计算中。
语法
SELECT AVG(列名称) FROM 表名
实例
select avg(age) from stu;


SQL GROUP BY 语句 用于结合合计函数，根据一个或多个列对结果集进行分组。group:分类，归类;
语法
SELECT AVG(列名称) FROM 表名 GROUP BY 列名称
实例
select avg(age),sex from stu group by classname;


SQL HAVING 子句 对查询后的结果 再 进行筛选  having:所有
语法
SELECT [AVG](列名称) FROM 表名 GROUP BY 列名称 HAVING [AVG](列名称) 比较 值
实例
select avg(age) from stu group by classname having avg(age)>20;


**多表查询**  inner:内部,里面 join:加入; 参加; 连接; 联结;
原始写法select * from class,stu where class.cid=stu.cid;
通用写法select * from class t1 inner join stu t2 on t1.id=t2.cid;   
自连查找同班同学
select * from stu t1 inner join stu t2 on t1.cid = t2.cid where t1.name="小明";



**客户端、链接传输、返回结果 三码必须统一**
保持客户端，服务器端连接，返回结果集3者字符集的一致。

设置客户端和服务器端连接，返回结果使用的字符集
mysql> set names utf8;

查看服务器支持哪些字符集
mysql> show character set;

查看系统字符集设置变量
mysql> show variables like "%character%";
+--------------------------+-----------------------------------------------+
| Variable_name            | Value                                         |
+--------------------------+-----------------------------------------------+
| character_set_client     | gbk   //客户端                                |
| character_set_connection | gbk   //链接                                  |
| character_set_database   | latin1                                        |
| character_set_filesystem | binary//文件系统  二进制                      |
| character_set_results    | gbk   //返回结果                              |
| character_set_server     | latin1//服务器                                |
| character_set_system     | utf8  //系统                                  |
| character_sets_dir       | F:\wamp\bin\mysql\mysql5.6.17\share\charsets\ |
+--------------------------+-----------------------------------------------+




mysql> desc stu;显示表结构
mysql> drop table if exists stu;删除表


//2017-7-18练习
create table www(
		id int(5) primary key AUTO_INCREMENT COMMENT '主键',
		name varchar(20) not null unique COMMENT '姓名',
		num int(5) zerofill COMMENT '编号',
		sex enum('男','女','保密') default '保密' COMMENT '性别',
		age int(3) unsigned COMMENT '年龄',
		phone varchar(11) not null COMMENT '手机',
		email varchar(20) not null COMMENT '邮箱',
		address varchar(50) not null COMMENT '地址'
	);




 ?>